import axios from "axios";
import { useStore } from "vuex";
import config from "../config";
import storage from "./storage";
import { ElMessage } from 'element-plus';
import { useRouter } from "vue-router";

// 定义常量，不变的字符串，数量多的话新建js去管理
const TOKEN_ERROR='登录认证失败'
const NETWORK_ERROR='登录超时，请检查你的网络配置'

const store=useStore()
const service=axios.create({
    baseURL:config.baseUrl,
    timeout:5000,
})

// 添加一个拦截器
service.interceptors.request.use((config)=>{
    let headers=config.headers
    const { token }=storage.getItem('userInfo')||''
    if (!headers.Authorization) {
        headers.Authorization="Bearer "+token
    }
    return config
})

// 添加一个响应拦截器
service.interceptors.response.use((res)=>{
    // 响应拦截处理
    const {code,data,msg}=res.data
    if (code==200) {
        return data
    }else if(code==40001){
        console.log(TOKEN_ERROR);
        //需要返回一个promise的错误对象
        return Promise.reject(TOKEN_ERROR)
    }else if(code==500001){
        // ElMessage.fail("您的登陆已过期，请重新登录");
        return Promise.reject(TOKEN_ERROR)
    }else{
        //若没有code，请求超时
        console.log(NETWORK_ERROR);
        return Promise.reject(NETWORK_ERROR)
    }
})

function request(options){
    options.method=options.method||'get'
    if (options.method==='get') {
        options.params=options.data
    }
    return service(options)
}

const requestList=['get','post']

requestList.forEach(item=>{
    request[item]=()=>{
        return request({
            url,
            data,
            method:item,
            ...options
        })
    }
})

export default request;